package com.briup.es.config.response;

import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.util.StringUtils;

import java.util.function.Function;

@Data
@RequiredArgsConstructor
public class Result<T> {
    /**
     * 响应状态码，如200表示成功，500表示服务器内部异常
     */
    private final int code;
    /**
     * 响应消息
     */
    private final String message;
    /**
     * 响应数据
     */
    private final T data;

    public Result() {
        this(200, "操作成功");
    }

    public Result(int code, String message) {
        this(code, message, null);
    }

    /**
     * 请求处理成功
     *
     * @return 成功的结果
     */
    public static <T> Result<T> success() {
        return new Result<>();
    }

    /**
     * 请求处理成功，并且需要传回数据
     *
     * @param data 结果数据
     */
    public static <T> Function<String, Result<T>> success(T data) {
        return (message) ->
                new Result<>(200,
                        StringUtils.hasText(message) ? message : "操作成功", data);
    }

    /**
     * 以下为操作失败的结果，操作失败无需返回数据
     *
     * @return 失败的结果
     */
    public static Result<?> fail() {
        return new Result<>(500, "服务器内部异常");
    }

    public static Result<?> fail(String message) {
        return new Result<>(500, message);
    }

    public static Result<?> fail(int code, String message) {
        return new Result<>(code, message);
    }
}

